package main

import (
	"fmt"
	"log"
	"os"
)

var cwd string

func init() {
	cwd, err := os.Getwd()
	if err != nil {
		log.Fatalf("os.Getwd failed: %v\n", err)
	}
	log.Printf("Working directory = %s", cwd)
}

func f() *int {
	v := 1
	return &v
}

func incr(p *int) int {
	*p++
	return *p
}

func gcd(x, y int) int {
	for y != 0 {
		x, y = y, x%y
	}

	return x
}

// Fibonacci
func fib(n int) int {
	x, y := 0, 1

	for range n {
		x, y = y, x+y
	}

	return x
}

func main() {
	// var x, y int
	//
	// fmt.Println(&x == &y, &x == &x, &x == nil)
	//
	// var p = f()
	//
	// fmt.Println(p)
	//
	// inc := incr(&x)
	// fmt.Println(x, inc)
	//
	// fmt.Println(gcd(100, 3))

	// fmt.Println(fib(5))

	// x1 := [3]int{1, 2, 3}
	// y1 := x1
	// y1[1] = 11
	// fmt.Println(x1, y1)

	// x2 := []int{1, 2, 3}
	// y2 := x2
	// y2[1] = 22
	// fmt.Println(x2, y2)

	// var pc [256]byte
	// for i := range pc {
	// 	pc[i] = pc[i/2] + byte(i&1)
	// }
	// fmt.Println(pc)

	// var bitsInByte uint64 = 0b00001101
	// fmt.Println(bitsInByte)
	// fmt.Println(byte(bitsInByte & 1))
	// fmt.Println(1 / 2)

	log.Println("package-level cwd is", cwd)
	fmt.Println("hello, world")
}
